/**
    算法描述：走迷宫有上下左右四个方向，显然会在原有状态
        的基础上发展出四个新的状态，这些状态中不符合题意
        的需要剪枝，返回了原有路径的需要剪枝。因此最终能
        到达终点的状态即为成功的。
    核心问题：对四个方向进行递归剪枝。
    解决所需数据结构 + 算法：存放方向的两个一维数组，深度优先搜索算法
**/
#include<iostream>
using namespace std;

int n, m;
bool flag = false, a[16][16];
int dx[4] = {0, -1, 0 ,1};
int dy[4] = {-1, 0, 1, 0};

struct loc {
    int x, y;
}start, target, temp, path[257];

void dfs(int x, int y, int len) {
    if (x==target.x && y==target.y) {
        flag = true;//标记无答案情况
        for(int i=0; i<len-1; i++)
            printf("(%d,%d)->", path[i].x, path[i].y);
        printf("(%d,%d)\n", path[len-1].x, path[len-1].y);
        return;
    } else {
        for (int i=0; i<4; i++) {
            int xx = x + dx[i];
            int yy = y + dy[i];
            if(xx<=n && yy<=m && xx>0 && yy>0 && a[xx][yy]) {
                temp.x = xx;
                temp.y = yy;
                path[len++] = temp;
                a[xx][yy] = 0;
                dfs(xx, yy, len);
                a[xx][yy] = 1;
                len--;
            }
        }
    }
}

int main() {
    cin >> n >> m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            cin >> a[i][j];
    cin >> start.x >> start.y;
    cin >> target.x >> target.y;
    path[0] = start;
    a[start.x][start.y] = false;
    // 核心代码
    dfs(start.x, start.y, 1);
    if(!flag)
        cout << -1 << endl;
    return 0;
}